using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Web;
using BEL;
using AEL.COM;

namespace APR
{
    public class AP_Com_Donacion_Ing : IAPR
    {
        #region Adapter
        private CEL.COM.DO_Com_Donacion_Ing _adpCom_Donacion_Ing;
        private CEL.COM.DO_Com_Donacion_Ing adpCom_Donacion_Ing
        {
            get
            {
                if (_adpCom_Donacion_Ing == null)
                    _adpCom_Donacion_Ing = new CEL.COM.DO_Com_Donacion_Ing();
                return _adpCom_Donacion_Ing;
            }
        }
        #endregion

        #region Operacion de Datos
        public void EmitirExcepcion(string mensaje, string caso)
        {
            Exception eCaso = new System.Exception(caso);
            Exception otroEX = new System.Exception(mensaje, eCaso);
            throw otroEX;
        }

        public bool Adelante(Scope s, object p_Objeto, string p_Proceso)
        {
            Com_Donacion_Ing p_Objeto_ = (Com_Donacion_Ing)p_Objeto;
            if (p_Objeto_.Estado == "PEN" && p_Proceso == "ORD")
            {
                try
                {
                    adpCom_Donacion_Ing.Adapter.BeginTransaction();
                    DEL.COM.DO_Com_Donacion_Ing.Insert_Orden(s, ref p_Objeto_);
                    Com_Donacion_Ing p_Objeto_Nuevo = CopiarObjeto(p_Objeto_);
                    p_Objeto_Nuevo.Estado = p_Proceso;
                    p_Objeto_Nuevo.Fecha_Update = DateTime.Now;
                    if (Actualizar(s, p_Objeto_, p_Objeto_Nuevo))
                    {
                        p_Objeto_ = p_Objeto_Nuevo;
                    }
                    adpCom_Donacion_Ing.Adapter.CommitTransaction();
                }
                catch 
                {
                    adpCom_Donacion_Ing.Adapter.RollbackTransaction();
                    throw;
                }
                try
                {
                    adpCom_Donacion_Ing.Adapter.BeginTransaction();
                    p_Proceso = "KAR";
                    DEL.COM.DO_Com_Donacion_Ing.Insert_Kardex(s, ref p_Objeto_);
                    Com_Donacion_Ing p_Objeto_Nuevo1 = CopiarObjeto(p_Objeto_);
                    List<Com_Donacion_Ing> lstComDonacionIng = adpCom_Donacion_Ing.GetById(s, p_Objeto_.Id);
                    p_Objeto_.Fecha_Update = lstComDonacionIng[0].Fecha_Update;
                    p_Objeto_Nuevo1.Estado = p_Proceso;
                    p_Objeto_Nuevo1.Fecha_Update = DateTime.Now;
                    if (Actualizar(s, p_Objeto_, p_Objeto_Nuevo1))
                    {
                        p_Objeto_ = p_Objeto_Nuevo1;
                    }
                    adpCom_Donacion_Ing.Adapter.CommitTransaction();
                }
                catch 
                {
                    adpCom_Donacion_Ing.Adapter.RollbackTransaction();
                    throw;
                }
            }
            else if (p_Objeto_.Estado == "ORD" && p_Proceso == "KAR")
            {
                try
                {
                    adpCom_Donacion_Ing.Adapter.BeginTransaction();
                    DEL.COM.DO_Com_Donacion_Ing.Insert_Kardex(s, ref p_Objeto_);
                    Com_Donacion_Ing p_Objeto_Nuevo = CopiarObjeto(p_Objeto_);
                    p_Objeto_Nuevo.Estado = p_Proceso;
                    p_Objeto_Nuevo.Fecha_Update = DateTime.Now;
                    if (Actualizar(s, p_Objeto_, p_Objeto_Nuevo))
                    {
                        p_Objeto_ = p_Objeto_Nuevo;
                    }
                    adpCom_Donacion_Ing.Adapter.CommitTransaction();
                }
                catch 
                {
                    adpCom_Donacion_Ing.Adapter.RollbackTransaction();
                    throw;
                }
            }
            return true;
        }

        public bool Atras(Scope s, object p_Objeto, string p_Proceso)
        {
            Com_Donacion_Ing p_Objeto_ = (Com_Donacion_Ing)p_Objeto;
            if (p_Objeto_.Estado == "KAR" && p_Proceso == "ORD")
            {
                try
                {
                    adpCom_Donacion_Ing.Adapter.BeginTransaction();
                    DEL.COM.DO_Com_Donacion_Ing.Delete_Kardex(s, ref p_Objeto_);
                    Com_Donacion_Ing p_Objeto_Nuevo = CopiarObjeto(p_Objeto_);
                    p_Objeto_Nuevo.Estado = p_Proceso;
                    p_Objeto_Nuevo.Fecha_Update = DateTime.Now;
                    if (Actualizar(s, p_Objeto_, p_Objeto_Nuevo))
                    {
                        p_Objeto_ = p_Objeto_Nuevo;
                    }
                    adpCom_Donacion_Ing.Adapter.CommitTransaction();
                }
                catch 
                {
                    adpCom_Donacion_Ing.Adapter.RollbackTransaction();
                    throw;
                }
                try
                {
                    adpCom_Donacion_Ing.Adapter.BeginTransaction();
                    p_Proceso = "PEN";
                    DEL.COM.DO_Com_Donacion_Ing.Delete_Orden(s, ref p_Objeto_);
                    Com_Donacion_Ing p_Objeto_Nuevo1 = CopiarObjeto(p_Objeto_);
                    List<Com_Donacion_Ing> lstComDonacionIng = adpCom_Donacion_Ing.GetById(s, p_Objeto_.Id);
                    p_Objeto_.Fecha_Update = lstComDonacionIng[0].Fecha_Update;
                    p_Objeto_Nuevo1.Estado = p_Proceso;
                    p_Objeto_Nuevo1.Fecha_Update = DateTime.Now;
                    if (Actualizar(s, p_Objeto_, p_Objeto_Nuevo1))
                    {
                        p_Objeto_ = p_Objeto_Nuevo1;
                    }
                    adpCom_Donacion_Ing.Adapter.CommitTransaction();
                }
                catch 
                {
                    adpCom_Donacion_Ing.Adapter.RollbackTransaction();
                    throw;
                }
            }
            else if (p_Objeto_.Estado == "ORD" && p_Proceso == "PEN")
            {
                try
                {
                    adpCom_Donacion_Ing.Adapter.BeginTransaction();
                    DEL.COM.DO_Com_Donacion_Ing.Delete_Orden(s, ref p_Objeto_);
                    Com_Donacion_Ing p_Objeto_Nuevo = CopiarObjeto(p_Objeto_);
                    p_Objeto_Nuevo.Estado = p_Proceso;
                    p_Objeto_Nuevo.Fecha_Update = DateTime.Now;
                    if (Actualizar(s, p_Objeto_, p_Objeto_Nuevo))
                    {
                        p_Objeto_ = p_Objeto_Nuevo;
                    }
                    adpCom_Donacion_Ing.Adapter.CommitTransaction();
                }
                catch
                {
                    adpCom_Donacion_Ing.Adapter.RollbackTransaction();
                    throw;
                }
            }
            return true;
        }


        public object GetById(Scope s, string p_Id)
        {
            List<Com_Donacion_Ing> resultado = new List<Com_Donacion_Ing>(1);
            try
            {
                resultado = adpCom_Donacion_Ing.GetById(s, p_Id);
            }
            catch
            {
                EmitirExcepcion(TXT_Mensajes._MSJ47, p_Id);
            }

            if (resultado.Count == 0)
                EmitirExcepcion(TXT_Mensajes._MSJ47, p_Id);

            return resultado[0];
        }



        public bool Actualizar(Scope s, object p_Objeto_Original, object p_Objeto)
        {
            Com_Donacion_Ing v_Objeto_ = (Com_Donacion_Ing)p_Objeto;
            Com_Donacion_Ing v_Objeto_Original_ = (Com_Donacion_Ing)p_Objeto_Original;
            int estadoId = adpCom_Donacion_Ing.Update(s, v_Objeto_, v_Objeto_Original_);
            return true;
        }

        public bool Permiso(Scope s, object p_Objeto, string p_Proceso)
        {
            throw new NotImplementedException();
        }


        private Com_Donacion_Ing CopiarObjeto(Com_Donacion_Ing p_Objeto)
        {
            Com_Donacion_Ing nuevoObjeto = new Com_Donacion_Ing(p_Objeto);
            return nuevoObjeto;
        }
        #endregion

    }
}
